Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle SMEFTsim topU3l <-> dim6top rotations #458

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open

Conversation

bryates
Copy link
Contributor

@bryates bryates commented Feb 25, 2025

This is an attempt to handle rotations between SMEFTsim topU3l and dim6top in IM. The changes to the datacard maker could use some refactoring, but everything works.

@bryates bryates requested review from sscruz and Andrew42 February 25, 2025 18:24
@bryates
Copy link
Contributor Author

bryates commented Feb 25, 2025

I should add that the text2workspace step crashes on glados when using expr for WCs, but it runs on lxplus. We will need to debug this in the future.

Copy link

codecov bot commented Feb 25, 2025

Codecov Report

Attention: Patch coverage is 96.00000% with 1 line in your changes missing coverage. Please review.

Project coverage is 25.64%. Comparing base (3471b74) to head (8e1c1fd).

Files with missing lines Patch % Lines
topeft/modules/datacard_tools.py 96.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #458      +/-   ##
==========================================
+ Coverage   25.29%   25.64%   +0.35%     
==========================================
  Files          31       31              
  Lines        4977     5002      +25     
==========================================
+ Hits         1259     1283      +24     
- Misses       3718     3719       +1     
Flag Coverage Δ
unittests 25.64% <96.00%> (+0.35%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@Andrew42
Copy link
Contributor

Interesting, how does this deal with the decomposition step? i.e. where we break up the parameterization into separate "sub-"processes in order to encode the WC dependence.

@bryates
Copy link
Contributor Author

bryates commented Feb 25, 2025

Interesting, how does this deal with the decomposition step? i.e. where we break up the parameterization into separate "sub-"processes in order to encode the WC dependence.

We don't do that anymore with IM, everything is just stored in the scaling file. If we wanted to do something similar in AAC, it would probably still be casting the "new" WCs as functions of the "old".

@Andrew42
Copy link
Contributor

Interesting, how does this deal with the decomposition step? i.e. where we break up the parameterization into separate "sub-"processes in order to encode the WC dependence.

We don't do that anymore with IM, everything is just stored in the scaling file. If we wanted to do something similar in AAC, it would probably still be casting the "new" WCs as functions of the "old".

Ah that's right, sorry! That does make things a lot simpler.

Looking at the code, I'm trying to understand what's going on in the block where you open/load the yaml file. My naive understanding is that the yaml file is mean to basically define a set of equations/functions whose arguments are purely WCs of the other basis, so when combine does the minimization in terms of those WCs the effect gets translated into the appropriate scaling in terms of the new/other WCs. What I don't get is all this manipulation you then need to do after you've loaded the yaml file. I also don't understand the use of eval in this block of code.

@Andrew42 Andrew42 self-requested a review February 25, 2025 21:48
@bryates
Copy link
Contributor Author

bryates commented Feb 25, 2025

Interesting, how does this deal with the decomposition step? i.e. where we break up the parameterization into separate "sub-"processes in order to encode the WC dependence.

We don't do that anymore with IM, everything is just stored in the scaling file. If we wanted to do something similar in AAC, it would probably still be casting the "new" WCs as functions of the "old".

Ah that's right, sorry! That does make things a lot simpler.

Looking at the code, I'm trying to understand what's going on in the block where you open/load the yaml file. My naive understanding is that the yaml file is mean to basically define a set of equations/functions whose arguments are purely WCs of the other basis, so when combine does the minimization in terms of those WCs the effect gets translated into the appropriate scaling in terms of the new/other WCs. What I don't get is all this manipulation you then need to do after you've loaded the yaml file. I also don't understand the use of eval in this block of code.

The manipulations were my (probably inefficient) way to keep things general. I saved the cosine of the Weinberg angle as CW instead of hard coding it. The eval call is to compute SW.

Comment on lines 322 to 327
wcs = {}
for wc in v[1]:
lo,hi = self.wc_ranges[wc]
wcs[wc] = f"{wc}[0,{lo},{hi}]"
v = v[0]
self.rotate[k] = v
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you accidentally removed the v = v.format(**wcs) line, which is still needed. So it should be:

wcs = {}
for wc in v[1]:
    lo,hi = self.wc_ranges[wc]
    wcs[wc] = f"{wc}[0,{lo},{hi}]"
v = v[0]
v = v.format(**wcs)
self.rotate[k] = v

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Woops, should be fixed now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants